package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 调用Person类中所有被注释@AutoRunMethod标注的方法N次
 * 具体次数由注解参数value决定
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person"); //获取Person类对象
        Constructor c = cls.getConstructor(String.class); //获取PErson类String参构造器
        Object obj = c.newInstance("张三"); //实例化Person对象
        Method[] methods = cls.getDeclaredMethods(); //获取所有方法
        for (Method method : methods) { //遍历所有方法
            if (method.isAnnotationPresent(AutoRunMethod.class)) { //被标注
                AutoRunMethod arm = method.getAnnotation(AutoRunMethod.class); //获取注解的值
                int value = arm.value(); //获取注解的value值
                System.out.println("调用方法:" + method.getName() + "()" + value + "次");
                for (int i = 0; i < value; i++) { //循环value次
                    method.invoke(obj); //调用方法
                }
            } else { //没有被标注
                System.out.println(method.getName() + "()没有被标注");
            }
        }
    }
}
